نظرية الأوتار” حين تنقلب إلى كارثة: كيف فتحت ثغرة في Protobuf.js الباب لاختطاف JavaScript
العنوان الفرعي: خلل حرج في مكتبة شائعة لتسلسل البيانات يعرّض ملايين التطبيقات لتنفيذ أوامر عن بُعد - والاستغلال بسيط على نحو مدهش.
في يوم جمعة هادئ من شهر مارس، عثر باحث أمني في Endor Labs على قنبلة موقوتة مدفونة في عمق قلب منظومة JavaScript. الجاني؟ Protobuf.js، مكتبة منتشرة في كل مكان تُشغّل كل شيء من تطبيقات الدردشة الفورية إلى قواعد البيانات السحابية. ومع ما يقارب 50 مليون تنزيل أسبوعيًا، فهي العمود الفقري الصامت لعدد لا يُحصى من الخدمات الرقمية. لكن سلسلة نصية واحدة غير مُتحقَّق منها - مخبأة في الطريقة التي يولّد بها Protobuf.js الشيفرة - فتحت مسارًا للمهاجمين للاستيلاء على الخوادم وأجهزة المطورين والبيانات الحساسة حول العالم.
عندما يستخدم المطورون Protobuf.js، فإنهم يثقون به لترجمة البنى المعقدة للبيانات بأمان من أجل التواصل بين الخدمات. لكن تحقيق Endor Labs كشف عن خلل قاتل: كانت المكتبة تُركّب دوال JavaScript عبر تجميع سلاسل نصية مأخوذة عمياءً من أسماء مخططات يزوّد بها المستخدم، ثم تُنفّذها باستخدام المُنشئ سيّئ السمعة Function(). ومن دون تعقيم مناسب، يستطيع مهاجم صياغة مخطط خبيث يحقن شيفرته الخاصة خلسة داخل الدالة المُولَّدة - شيفرة ستعمل فور معالجة التطبيق للرسالة الملوّثة.
التداعيات خطيرة. فأي خادم أو تطبيق يحمّل مخططات يتحكم بها المهاجم يمكن اختراقه فورًا. وهذا يعني أن متسللًا قد يصل إلى متغيرات البيئة، ويسرق بيانات الاعتماد، وينبش قواعد البيانات، أو حتى يتحرك جانبيًا عبر الأنظمة الداخلية. ولم تكن بيئات التطوير بمنأى أيضًا: فمجرد فك ترميز مخطط غير موثوق محليًا قد يفعّل الاستغلال.
تم تتبّع الثغرة تحت المعرّف GHSA-xq3m-2v4x-88gg (بانتظار رقم CVE)، وقد كُشف عنها بمسؤولية من قِبل Cristian Staicu في 2 مارس. وخلال أيام، سارع القائمون على Protobuf.js إلى ترقيع المشكلة على GitHub، وأصدروا حزم npm المُصلحة في أوائل أبريل. يقوم التصحيح الآن بإزالة الأحرف غير الأبجدية الرقمية من أسماء الأنواع، ما يُحبط أكثر مسارات الهجوم مباشرة - غير أن الخبراء يحذّرون من أن إعادة تصميم أكثر جذرية مطلوبة للقضاء على الخطر حقًا.
لا تُجامل إرشادات Endor Labs: “الاستغلال مباشر.” ويُظهر إثبات المفهوم المرفق مدى سهولة تسليح هذا السهو. ورغم عدم وجود دليل على هجمات في البرية (حتى الآن)، فإن الشعبية الهائلة لـ Protobuf.js تعني أن نافذة الاستغلال الجماعي مفتوحة على مصراعيها - ما لم يُحدّث المستخدمون بسرعة.
وبعيدًا عن الترقيع، تُحث فرق الأمن على تدقيق الاعتماديات، والتعامل مع المخططات كمدخلات غير موثوقة، وتفضيل المخططات الثابتة أو المُسبقة التجميع كلما أمكن. الدرس واضح: في عصر سلاسل توريد البرمجيات، حتى أصغر سلسلة نصية غير مُتحقَّق منها يمكن أن تفكك نسيج الثقة الرقمية.
وبينما يسارع عالم JavaScript إلى التحديث وتعزيز دفاعاته، تُعد حادثة Protobuf.js تذكيرًا صارخًا: الراحة في الشيفرة قد تأتي بكلفة أمنية باهظة. في المرة القادمة التي يحلل فيها تطبيقك مخططًا، فكّر فيما - أو مَن - قد يكون مختبئًا في الداخل.
WIKICROOK
- تنفيذ الشيفرة عن بُعد (RCE): تنفيذ الشيفرة عن بُعد (RCE) هو عندما يشغّل مهاجم شيفرته الخاصة على نظام الضحية، وغالبًا ما يؤدي ذلك إلى السيطرة الكاملة على ذلك النظام أو اختراقه.
- بروتوكول بافرز (Protobuf): بروتوكول بافرز (Protobuf) هو أسلوب لتسلسل البيانات يُستخدم كثيرًا من قِبل البرمجيات الخبيثة لإخفاء أو تمويه اتصالات القيادة والتحكم.
- مدير حزم Node (npm): يدير مدير حزم Node (npm) مكتبات JavaScript، ما يتيح للمطورين تثبيت الشيفرة ومشاركتها وتحديثها بأمان وكفاءة لمشاريع الويب.
- توليد الشيفرة الديناميكي: يتيح توليد الشيفرة الديناميكي للبرامج إنشاء الشيفرة وتشغيلها أثناء وقت التنفيذ، ما يزيد المرونة لكنه يُدخل أيضًا ثغرات أمنية محتملة إذا لم يُدار بشكل صحيح.
- المخطط (Schema): المخطط هو مخططٌ تنظيمي يحدد هياكل البيانات وينظمها، بما يضمن الاتساق ويقلل الأخطاء عندما تتغير قواعد البيانات أو التطبيقات.